const { app, BrowserWindow } = require('electron');
const isDev = require('electron-is-dev');
const path = require('path');
const glob = require('glob')
const exec = require('child_process').exec

// 任何你期望执行的cmd命令，ls都可以

// let cmdStr = './你的可执行程序名称 -p 需要输入密码的话'
let cmdStr = 'start cmd /k test.bat'
// 执行cmd命令的目录，如果使用cd xx && 上面的命令，这种将会无法正常退出子进程
// let cmdPath = '执行cmd命令的路径'
let cmdPath = isDev ? path.resolve(__dirname, '../build/') : path.resolve(__dirname, '../../server')
// 子进程名称
let workerProcess

runExec();

function runExec() {
    // 执行命令行，如果命令不需要路径，或就是项目根目录，则不需要cwd参数：
    workerProcess = exec(cmdStr, { cwd: cmdPath })
    // 不受child_process默认的缓冲区大小的使用方法，没参数也要写上{}：workerProcess = exec(cmdStr, {})

    // 打印正常的后台可执行程序输出
    workerProcess.stdout.on('data', function (data) {
        console.log('stdout: ' + data);
    });

    // 打印错误的后台可执行程序输出
    workerProcess.stderr.on('data', function (data) {
        console.log('stderr: ' + data);
    });

    // 退出之后的输出
    workerProcess.on('close', function (code) {
        console.log('out code：' + code);
    })
}

const staticPath = isDev ? path.resolve(__dirname) + '/build/' :  __dirname
const express = require('express')
const expressApp = express()
expressApp.use(express.static(staticPath))
expressApp.listen(3000, () => {
    console.log('server start on http://localhost:3000')
})

// 利用electron-debug，添加和Chrome类似的快捷键
isDev && require('electron-debug')({ enabled: true, showDevTools: false });
// 用于添加Chromium插件
function createDevTools() {
    const {
        default: installExtension,
        REACT_DEVELOPER_TOOLS,
        REDUX_DEVTOOLS,
    } = require('electron-devtools-installer');
    // 安装devtron
    const devtronExtension = require('devtron');
    devtronExtension.install();
    // 安装React开发者工具
    installExtension(REACT_DEVELOPER_TOOLS);
    installExtension(REDUX_DEVTOOLS);
}

app.commandLine.appendSwitch('ppapi-flash-path', app.getPath('pepperFlashSystemPlugin'))
app.commandLine.appendSwitch('ppapi-flash-version', '29.0.0.013')

// const devUrl = 'http://localhost:3001/#/loading';
const devUrl = 'http://120.78.80.132/#/loading'
// 本地文件路径定位到打包的react文件
// const localUrl = 'http://120.78.80.132/#/loading'
const localUrl = 'http://localhost:3001/#/loading'
const appUrl = isDev ? devUrl : localUrl;
let win;

function createWindow() {
    // 创建浏览器窗口。
    win = new BrowserWindow({
        width: 800,
        height: 600,
        autoHideMenuBar: true,
        webPreferences: {
            javascript: true,
            plugins: true,
            nodeIntegration: true, // 是否集成 Nodejs
        }
    });
    //   win.webContents.openDevTools()
    win.maximize()
    // 然后加载应用的 index.html。
    win.loadURL(appUrl);

    // 当 window 被关闭，这个事件会被触发。
    win.on('closed', () => {
        win = null;
    });
}

app.on('ready', createWindow);

// 当全部窗口关闭时退出。
app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') {
        app.quit();
    }
});

app.on('activate', () => {
    if (win === null) {
        createWindow();
        createDevTools()
    }
});

loadDemos();
// Require each JS file in the main-process dir
function loadDemos() {
    console.log(path.join(__dirname, 'main-process/**/*.js'))
    const files = glob.sync(path.join(__dirname, 'main-process/**/*.js'))
    files.forEach((file) => { require(file) })
}